package com.Stream;

import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class StreamDemo01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("李洛克");
        list.add("李连杰");
        list.add("李小龙");
        list.add("陈武林");
        list.add("张全蛋");
        list.add("夏一铭");
        //filter 方法获取流中的 每一个数据,而test方法中的s,就依次表示流中的每一个数据,
        //我们只要在test 方法中对s进行判断就可以了,如果判断的结果为true,则当前的数据留下 如果判断的结果为false,则当前数据就不要,


        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                //编写逻辑对stream流中的数据进行过滤
                //判断参数是否以"李"开头,如果是返回true,且存入到steam,如果不是以"李"开头,那么就过滤掉了

                return s.startsWith("李");
            }
        }).forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                //对stream流中的数据消费的方式
                System.out.println(s);
            }
        });
        System.out.println("lambda表达式");
        list.stream().filter(  //因为predicate接口中只有一个抽象方法test 所以我们可以使用 lambda表达式来简化
                (String s) -> {
                    boolean st = s.startsWith("李");
                    return st;
                }
        ).forEach((String s) -> {
            System.out.println(s);
        });
    }
}
